/*
 * Copyright (c) Jiandong.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

import { YogaValue } from './YogaValue';
import { YogaBaselineFunction } from './YogaBaselineFunction';
import { YogaMeasureFunction } from './YogaMeasureFunction';
import { YogaAlign } from './YogaAlign';
import { YogaPositionType } from './YogaPositionType';
import { YogaEdge } from './YogaEdge';
import { YogaDirection } from './YogaDirection';
import { YogaFlexDirection } from './YogaFlexDirection';
import { YogaWrap } from './YogaWrap';
import { YogaJustify } from './YogaJustify';


/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

//package com.facebook.yoga;

export interface YogaProps {

  /* Width properties */

  setWidth(width: number): void;

  setWidthPercent(percent: number): void;

  setMinWidth(minWidth: number): void;

  setMinWidthPercent(percent: number): void;

  setMaxWidth(maxWidth: number): void;

  setMaxWidthPercent(percent: number): void;

  setWidthAuto(): void;

  /* Height properties */

  setHeight(height: number): void

  setHeightPercent(percent: number): void;

  setMinHeight(minHeight: number): void;

  setMinHeightPercent(percent: number): void;

  setMaxHeight(maxHeight: number): void;

  setMaxHeightPercent(percent: number): void;

  setHeightAuto(): void;

  /* Margin properties */

  setMargin(edge: YogaEdge, margin: number): void;

  setMarginPercent(edge: YogaEdge, percent: number): void;

  setMarginAuto(edge: YogaEdge): void;

  /* Padding properties */

  setPadding(edge: YogaEdge, padding): void;

  setPaddingPercent(edge: YogaEdge, percent: number): void;

  /* Position properties */

  setPositionType(positionType: YogaPositionType): void;

  setPosition(edge: YogaEdge, position: number): void;

  setPositionPercent(edge: YogaEdge, percent: number): void;

  /* Alignment properties */

  setAlignContent(alignContent: YogaAlign): void;

  setAlignItems(alignItems: YogaAlign): void;

  setAlignSelf(alignSelf: YogaAlign): void;

  /* Flex properties */

  setFlex(flex: number): void;

  setFlexBasisAuto(): void;

  setFlexBasisPercent(percent: number): void;

  setFlexBasis(flexBasis: number): void;

  setFlexDirection(direction: YogaFlexDirection): void;

  setFlexGrow(flexGrow: number): void;

  setFlexShrink(flexShrink: number): void;

  /* Other properties */

  setJustifyContent(justifyContent: YogaJustify): void;

  setDirection(direction: YogaDirection): void;

  setBorder(edge: YogaEdge, value: number): void;

  setWrap(wrap: YogaWrap): void;

  setAspectRatio(aspectRatio: number): void;

  setIsReferenceBaseline(isReferenceBaseline: boolean): void;

  setMeasureFunction(measureFunction: YogaMeasureFunction): void;

  setBaselineFunction(yogaBaselineFunction: YogaBaselineFunction): void;

  /* Getters */

  getWidth(): YogaValue;

  getMinWidth(): YogaValue;

  getMaxWidth(): YogaValue;

  getHeight(): YogaValue;

  getMinHeight(): YogaValue;

  getMaxHeight(): YogaValue;

  getStyleDirection(): YogaDirection;

  getFlexDirection(): YogaFlexDirection;

  getJustifyContent(): YogaJustify;

  getAlignItems(): YogaAlign;

  getAlignSelf(): YogaAlign;

  getAlignContent(): YogaAlign;

  getPositionType(): YogaPositionType;

  getFlexGrow(): number;

  getFlexShrink(): number;

  getFlexBasis(): YogaValue;

  getAspectRatio(): number;

  getMargin(edge: YogaEdge): YogaValue;

  getPadding(edge: YogaEdge): YogaValue;

  getPosition(edge: YogaEdge): YogaValue;

  getBorder(edge: YogaEdge): number;
}
